Amazon SageMaker JumpStart – 事前準備されたリソースを活用して簡単に画像分類やってみた
データアナリティクス事業本部の貞松です。
↓のせーのさんの記事で速報されたように、Amazon SageMakerの新機能として「Amazon SageMaker JumpStart」が発表されました。
AWS re:Invent 2020のMachine Learning Keynoteでは何故か触れられませんでしたが、正直個人的には最も衝撃的なアップデート機能だったので、本記事では改めて機能全体を解説しつつ、この機能を利用して実際に画像分類を実行してみます。
(本当になんでKeynoteで紹介されなかったんだろう…)
Amazon SageMaker JumpStartとは
Amazon SageMaker JumpStartは、事前準備されたリソースを活用して、目的に合わせた機械学習の実行を容易にしてくれる非常に強力な機能です。
Amazon SageMaker Studio上のSageMaker JumpStartダッシュボードから利用することができ、GUI操作により機械学習ソリューションの展開や学習済みモデルのデプロイ、学習済みモデルのファインチューニング等を実行することができます。
事前準備されたリソースは以下です。
Solutions
機械学習を用いた課題解決について、SageMaker以外のAWSリソースを含めたアーキテクチャをCloudFormationスタックで展開する為の正真正銘「ソリューション」が用意されています。
機械学習チュートリアルの定番である手書き文字認識はさておき、トランザクションデータに対する異常検知や予測、強化学習の例題に至るまで、幅広いソリューションが用意されており、機械学習モデルの部分だけでなく「機械学習システム」としてのアーキテクチャまで含めたプロジェクトベースとして活用できます。
Text models
BERT、あるいはBERT派生の自然言語処理用の学習済みモデルが用意されています。
学習済みモデルをデプロイするだけであれば、日本語での実用は精度面で難しいところがありますが、モデルのファインチューニングまで可能な為、既存モデルの課題点についても柔軟に対応できる可能性があります。
Vision models
ResNetをはじめとするデファクトスタンダードなコンピュータビジョン(CV)モデルが準備されています。
こちらもファインチューニングが可能な為、追加の画像とラベル、パラメータセットで学習させることでモデルを拡張することも可能となっています。
SageMaker algorithms & Example notebooks
SageMakerで実装されているビルトインの機械学習アルゴリズムを実行したり、外部の機械学習フレームワークを使った学習を実行する等のサンプルノートブックが用意されています。
これまでは、SageMakerのノートブックインスタンスやSageMaker Studio上でGitHubで公開されているamazon-sagemaker-examplesリポジトリをアタッチすることでサンプルノートブックを利用していましたが、JumpStartダッシュボードからポチポチ選択してノートブックを展開するだけで利用可能になりました。
Blogs & Video tutorials (学習リソース)
JumpStartダッシュボードの最下部にあるSageMakerの利用に関する学習リソースです。
多数のテキスト(Blog)、動画が用意されているので、必要に応じてご参照ください。
JumpStartで画像分類やってみた
ここからはResNetの学習済みモデルを利用した画像分類を例にJumpStartの利用手順を解説していきます。
JumpStartを使用する為の事前設定
ここまでに解説した内容の通り、JumpStartはSageMaker Studio上で利用する為、まずはSageMaker Studioが利用できる環境を用意する必要があります。
また、SageMaker Studioの設定として、以下の画像のような設定項目が追加されており、これを有効化しないとJumpStartが利用できないのでご注意ください。
SageMaker Studioを起動 → JumpStartダッシュボードを開く
必要な設定を完了してSageMaker Studioを起動したら、左側にあるタブから「SAGEMAKER JUMPSTART LAUNCHED ASSETS」を開きます。 「Browse JumpStart」ボタンをクリックすることで、JumpStartダッシュボードが開きます。
ResNet 18の学習済みモデルを使用する
ResNetとは
ResNetとはResidual Neural Networkの略称で、分類としてはニューラルネットワークの一種です。
畳み込みニューラルネットワーク(Convolutional Neural Network, CNN)の発展系であり、主に画像認識おける強力なモデルを提供します。
ちなみにResNet 18の「18」はネットワーク層の数で、この値が大きいモデルほど深いネットワークによる学習モデルであることを示しています。
JumpStartからResNet 18を使用する
JumpStartダッシュボードからResNet 18を選択します。
以下、ResNet 18の詳細画面です。
単純に学習済みモデルをSageMakerエンドポイントにデプロイする操作とファインチューニングを実行する操作の2パターンが確認できます。
画面下の方には、ResNet 18の概要やデプロイしたモデルの使用方法が記載されています。
また、画面の最下部には、ファインチューニングを実行する為の情報が記載されており、特に必要なデータセットの仕様についてはこちらを確認した上で準備するのが良いかと思います。
モデルのデプロイ
今回は単純に学習済みモデルをデプロイして、ノートブックから推論を実行する手順を解説します。
デプロイの設定としては、推論を実行するインスタンスの選択とエンドポイント名だけというシンプルな設定となっています。
設定が完了したら「Deploy」ボタンをクリックします。
Deployが完了すると以下のようにデプロイしたエンドポイントの詳細画面が開きます。
デプロイされたモデル(エンドポイント)で画像分類を実行
JumpStartでは、デプロイされたモデルでの推論を簡単に実行できるようにサンプルのノートブックまで生成してくれます。
エンドポイントの詳細画面にある「Open notebook」ボタンをクリックします。
あとは何も考えずにノートブックを実行すると、サンプル画像をエンドポイントに投げ込んで推論結果を取得する処理が確認できます。
このサンプルでは、猫と犬の画像を投げ込んでいますが、これを自前の画像に差し替えたり、動的に入力するように作り替えればそのまま実戦投入も可能です。
ちゃんと推論結果(画像に対応したラベル)が得られていることを確認できました。
後片付け (エンドポイントの削除)
デプロイ時に設定した推論用のインスタンスサイズに応じた課金が発生するので、不要なエンドポイントは削除しておきましょう。
これもエンドポイントの詳細画面で「Delete」ボタンをクリックするだけです。これも非常に便利ですね。
(参考)モデルのファインチューニング
ファインチューニングとは
前述で、学習済みモデルに対してファインチューニングを実行できると述べましたが、念の為に「そもそもファインチューニングとは?」という説明を以下に記載しておきます。
機械学習の話題の中でよく混同される「転移学習」と並べてザックリ説明します。
- ファインチューニング
- 学習済みモデルの各層の重みを微調整する
- 学習済みモデルの重みを初期値とし、再度学習することによって微調整する
- 学習済みモデルと全く異なるモデルを作ることができる (以下例)
- 犬と猫と人間を分類するモデル → 柴犬とゴールデンレトリバーを分類するモデル
- 犬と猫と人間を分類するモデル → 人間を年代毎に分類するモデル
- 転移学習
- 学習済みモデルの各層の重みは更新しない
- 付け替えられた最終出力層および追加の出力層のみを使用して学習する
- 例えば、犬と猫と人間を分類するモデルを犬と猫のデータで再学習させることで犬と猫を分類するモデルを作ることができる
JumpStartでのファインチューニング設定画面
JumpStartでのファインチューニング設定画面では、デプロイ先の推論エンドポイントの設定に加えて、再学習用のデータセットの指定やハイパーパラメータの設定を行うことができます。
再学習用のデータセットの準備と学習実行に必要なインスタンスリソースのコストなど、諸々の事情で今回はファインチューニングの実行までは至っていませんが、後々これも試す予定です。
まとめ
re:InventのMachine Learning Keynoteでは何故か触れられませんでしたが、SageMaker JumpStartは機械学習の活用に対する敷居を格段に下げられる破壊的な新機能であると言えます。
既存の学習済みモデルを簡単にデプロイ、推論実行までできるのは魅力的ですが、個別の課題に対応する為のファインチューニングまでできてしまうのが一番の肝だと思っているので、こちらも準備でき次第試していきます!